package cn.lili.modules.union.service;

import cn.lili.common.vo.PageVO;
import cn.lili.common.vo.ResultMessage;
import cn.lili.modules.distribution.entity.dos.Distribution;
import cn.lili.modules.distribution.entity.vos.DistributionVO;
import cn.lili.modules.distribution.entity.vos.HomeResult;
import cn.lili.modules.member.entity.dos.Union;
import cn.lili.modules.member.entity.dos.UnionMember;
import cn.lili.modules.member.entity.dos.UnionMemberApply;
import cn.lili.modules.member.entity.dto.UnionAddDTO;
import cn.lili.modules.member.entity.dto.UnionMemberDetailDTO;
import cn.lili.modules.member.entity.vo.NumberOfOwners;
import cn.lili.modules.order.order.entity.dos.OrderFlow;
import cn.lili.modules.order.order.entity.dto.OrderFlowDTO;
import cn.lili.modules.order.order.entity.vo.PerformanceDetailVO;
import cn.lili.modules.member.entity.dto.UnionMemberCountDTO;
import cn.lili.modules.order.order.entity.vo.UnionOrderParams;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.shardingsphere.transaction.annotation.ShardingTransactionType;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

public interface UnionMemberService extends IService<UnionMember> {

    /**
     * 分页查询工会成员信息
     * @param unionMemberParams
     * @param pageVO
     * @return
     */
    Page<UnionMember> getByPage (UnionMember unionMemberParams, PageVO pageVO);

    /**
     * 根据工会ID和成员ID查询工会成员
     * @param unionId
     * @param memberId
     * @return
     */
    UnionMember getByUnionMemberId (String unionId, String memberId);

    UnionMember getByUnionMemberId (String memberId);

    /**
     * 获取工会成员人数
     * @param unionId
     * @return
     */
    long getCountByUnionId (String unionId);

    /**
     * 添加工会成员
     * @param unionAddDTO
     */
    void addMember(UnionAddDTO unionAddDTO);

    /**
     * 添加工会成员
     * @param unionAddDTO
     * @param id
     */
    void addUnionMember(UnionAddDTO unionAddDTO, String id);

    /**
     * 获取成员统计数据
     * @param unionId
     * @return
     */
    UnionMemberCountDTO getCountData(String unionId);

    /**
     * 获取工会成员列表
     * @param unionId
     * @param page
     * @return
     */
    Page<UnionMember> getMembersByPage(String unionId, PageVO page);

    /**
     * 踢出工会成员
     * @param unionAddDTO
     */
    void deleteUnionMember (UnionAddDTO unionAddDTO);

    /**
     * 获取工会成员本月业绩数据
     * @return
     */
    Page<OrderFlowDTO> getCurrentMonthByUnionMember (UnionOrderParams params);

    /**
     * 根据工会成员统计本月已结算金额、待结算金额、退单金额
     * @return
     */
    PerformanceDetailVO getCurrentMonthStatisticsByMember (UnionOrderParams params);

    /**
     * 获取工会成员本月业绩数据
     * @return
     */
    Page<OrderFlowDTO> getLastMonthByUnionMember (UnionOrderParams params);

    /**
     * 根据工会成员统计上月已结算金额、待结算金额、退单金额
     * @return
     */
    PerformanceDetailVO getLastMonthStatisticsByMember (UnionOrderParams params);

    UnionMemberDetailDTO getDetailInfo(String memberId);

    /**
     * 审批工会成员
     * @param unionId
     * @param memberId
     * @param status
     */
    void apply (String unionId, String memberId, String status);

    UnionMember getUnionChairman(String unionId);

    List<UnionMember> getMemberIdList(String unionId);

    ResultMessage<HomeResult> shopkeeperStatistics();

    public List<Distribution> getUnionMemberPage(DistributionVO distributionVO);

    /**
     * 根据类型，获取运营商下面的已加入工会的店主
     *
     * @param type 类型 1今日，2昨日......
     * @return 新增店主数量 + 总数
     */
    NumberOfOwners numberOfOwners(Integer type);

    /**
     * 根据类型，获取运营商下面的已加入工会的店主 ==>  业绩
     *
     * @param type 类型 1今日，2昨日......
     * @return 新增业绩数 + 总数
     */
    NumberOfOwners shopOwnersTurnover(Integer type);

//    List<UnionMember> getUnionMemberList();

}
